//
//  HMUserAccountViewModel.swift
//  Black22
//
//  Created by Apple on 16/11/22.
//  Copyright © 2016年 KY. All rights reserved.
//

import UIKit
//  OAuth登录页面对应的ViewModel
class HMUserAccountViewModel: NSObject {

    //  单例全局访问点
    static let sharedUserAccount: HMUserAccountViewModel = HMUserAccountViewModel()
    
    //  账户模型
    var userAccount: HMUserAccount? {
        return HMUserAccount.loadUserAccount()
    }
    
    //  判断是否登录
    var isLogin: Bool {
        return accessToken != nil
    }
    
    //  判断accesstoken是否过期
    var accessToken: String? {
        
        guard let token = userAccount?.access_token else {
            return nil
        }
        //  代码执行到此表示token不为nil， 判断时间是否过期
        if userAccount?.expires_date?.compare(Date()) == ComparisonResult.orderedDescending {
            //  降序表示token时间没有过期
            return token
        } else {
            //  过期返回nil
            return nil
        }
        
        
    }
    
    
    //  根据code获取accesstoken
    func requestAccesstoken(code: String, callBack: @escaping (Bool)->Void) {
        
        HMNetworkTools.sharedTools.requestAccessToken(code: code, callBack: { (response, error) -> Void in
            if error != nil {
                print(error!)
                callBack(false)
                return
            }
            //  代码执行到此获取字典数据
            let dic = response as! [String: Any]
            print(dic)
            let userAccount = HMUserAccount(dic: dic)
            //  获取用户信息
            self.requestUserInfo(userAccount: userAccount, callBack: callBack)
        })
    }
    //  获取用户信息
    private func requestUserInfo(userAccount: HMUserAccount, callBack: @escaping (Bool) -> Void) -> Void {
        
        HMNetworkTools.sharedTools.requestUserInfo(accessToken: userAccount.access_token!, uid: userAccount.uid, callBack: { (response, error) -> Void in
            
            if error != nil {
                print(error!)
                callBack(false)
                return
            }
            //  获取字典数据
            let dic = response as! [String: Any]
            //  用户昵称，用户头像
            //  设置模型数据
            userAccount.name = dic["name"] as? String
            userAccount.avatar_large = dic["avatar_large"] as? String
            
            //  保存用户数据
            userAccount.saveUserAccount()
            //  执行闭包完成数据回调
            callBack(true)
            
        })
        
        
        
    }
    
}
